home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Linux Cubed Series 7: Sunsite
/
Linux Cubed Series 7 - Sunsite Vol 1.iso
/
system
/
shells
/
scsh-0.4
/
scsh-0
/
scsh-0.4.2
/
rts
/
lize.scm
< prev
next >
Wrap
Text File
|
1995-10-13
|
1KB
|
36 lines
; Copyright (c) 1993, 1994 Richard Kelsey and Jonathan Rees. See file COPYING.
; Simplest rational within an interval. Copied from IEEE P1178/D4 nimpl.tex.
(define (rationalize x e)
(let ((e (abs e)))
(simplest-rational (- x e) (+ x e))))
(define (simplest-rational x y)
(define (simplest-rational-internal x y)
;; assumes 0 < X < Y
(let ((fx (floor x))
(fy (floor y)))
(cond ((not (< fx x))
fx)
((= fx fy)
(+ fx
(/ 1 (simplest-rational-internal
(/ 1 (- y fy))
(/ 1 (- x fx))))))
(else
(+ 1 fx)))))
;; Do some juggling to satisfy preconditions of simplest-rational-internal.
(cond ((not (< x y))
(if (rational? x) x (error "(rationalize <irrational> 0)" x)))
((positive? x)
(simplest-rational-internal x y))
((negative? y)
(- 0 (simplest-rational-internal (- 0 y) (- 0 x))))
(else
(if (and (exact? x) (exact? y))
0
(exact->inexact 0)))))